import os
from PIL import Image


def write_to_file(file_path, data):
    with open(file_path, "w", encoding="utf-8") as file:
        file.write(data)


def delete_file(file_path):
    """
    删除指定文件，支持 Windows 和 Linux。
    :param file_path: 文件的完整路径
    """
    try:
        if os.path.exists(file_path):  # 检查文件是否存在
            os.remove(file_path)  # 删除文件
            print(f"文件已成功删除: {file_path}")
        else:
            print(f"文件不存在: {file_path}")
    except Exception as e:
        print(f"删除文件时发生错误: {e}")


def compress_image(input_path, output_path, max_size_kb=30, resize_factor=0.3, quality=85):
    """
    压缩图片大小，同时保留较高的清晰度。

    :param input_path: 原图片路径
    :param output_path: 压缩后图片路径
    :param max_size_kb: 图片目标大小（单位：KB）
    :param resize_factor: 每次调整尺寸的比例（小于1.0会缩小图片）
    :param quality: 起始的JPEG质量参数（1-95）
    """
    with Image.open(input_path) as img:
        # 确保图片是 RGB 格式（部分图片可能是 PNG 或灰度格式）
        if img.mode in ("RGBA", "P"):
            img = img.convert("RGB")

        # 循环调整图片尺寸和质量，直到符合目标大小
        while True:
            # 保存图片到指定路径
            img.save(output_path, format="JPEG", quality=quality)
            size_kb = os.path.getsize(output_path) / 1024  # 获取图片大小（KB）

            if size_kb <= max_size_kb or quality <= 10:
                print(f"压缩完成，文件大小：{size_kb:.2f} KB，最终质量：{quality}")
                break

            # 缩小尺寸并降低质量
            width, height = img.size
            img = img.resize(
                (int(width * resize_factor), int(height * resize_factor)),
                Image.Resampling.LANCZOS  # 替代 Image.ANTIALIAS
            )
            quality -= 5  # 每次减少 JPEG 质量
